using System;

////////////////////////////////
////////////////////////////////
////////////////////////////////
////////////////////////////////
// C# 中的关键组织结构概念包括程序、命名空间、类型、成员和程序集。
// 1. 程序声明类型，而类型则包含成员，并被整理到命名空间中。 
// 2. 类型示例包括类、结构和接口。
// 3. 成员示例包括字段、方法、属性和事件。 
// 4. 编译完的 C# 程序实际上会打包到程序集中。 
// 5. 程序集的文件扩展名通常为 .exe 或 .dll，具体取决于实现的是应用程序还是库。
////////////////////////////////
// 6. 程序集包含中间语言 (IL) 指令形式的可执行代码和元数据形式的符号信息。 
//    执行前，.NET 公共语言运行时的实时 (JIT) 编译器会将程序集中的 IL 代码转换为特定于处理器的代码。
//   
// 7. 由于程序集是包含代码和元数据的自描述功能单元，因此无需在 C# 中使用 #include 指令和头文件。 
//    只需在编译程序时引用特定的程序集，即可在 C# 程序中使用此程序集中包含的公共类型和成员。
//
////////////////////////////////
////////////////////////////////
////////////////////////////////


namespace Acme.Collections {

    public class Stack<T> {
        Entry _top;

        public void Push(T data) {
            _top = new Entry(_top, data);
        }

        public T Pop(){
            if(_top == null) {
                throw new InvalidOperationException();
            }
            T result = _top.Data;
            _top = _top.Next;
            return result;
        }

        class Entry {
            public Entry Next{get;set;}
            public T Data{get;set;}

            public Entry(Entry next, T data) {
                Next = next;
                Data = data;
            }
        }
    }

}